package com.guan.study.poi.write;

import com.guan.study.easyExcelDemo.Teacher;
import com.guan.study.poi.UseCaseExportVo;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.beans.PropertyDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * @Date: 2023/7/1 1:27
 * @Author: yaobai
 * @Description:
 * CellStyle 是用于定义 Excel 单元格样式的类或对象，它通常与 Excel 操作相关联。下面是关于 CellStyle 属性的解析：
 *
 * Alignment（对齐方式）：指定单元格内内容的水平对齐方式，如左对齐、右对齐、居中对齐等。
 * VerticalAlignment（垂直对齐方式）：指定单元格内内容的垂直对齐方式，如顶部对齐、底部对齐、居中对齐等。
 * BorderBottom（底部边框）：设置底部边框的样式和颜色。
 * BorderTop（顶部边框）：设置顶部边框的样式和颜色。
 * BorderLeft（左侧边框）：设置左侧边框的样式和颜色。
 * BorderRight（右侧边框）：设置右侧边框的样式和颜色。
 * FillPattern（填充模式）：指定单元格的背景填充模式，例如纯色填充、图案填充等。
 * FillForegroundColor（填充前景色）：设置填充的前景色。
 * FillBackgroundColor（填充背景色）：设置填充的背景色。
 * Font（字体）：可以设置字体的属性，如字体名称、大小、颜色等。
 * DataFormat（数据格式）：指定单元格中数据的显示格式，如货币格式、日期格式等。
 * WrapText（自动换行）：指示单元格是否自动换行。
 */
public class Write01 {

    private static final String PATH = "E:\\WorkDirTest2\\";

    public static void main(String[] args) throws Exception {

        //poi合并单元格的写
        excelWrite03();

    }

    private static void excelWrite03() throws IOException {
        //表头行数据
        List<String> heads = new ArrayList<>();
        heads.add("讲师ID");
        heads.add("讲师姓名");
        heads.add("讲师简介");
        heads.add("讲师资历");
        heads.add("头衔");
        heads.add("讲师头像");
        heads.add("排序");
        heads.add("逻辑删除");
        heads.add("创建时间");
        heads.add("更新时间");
        //数据行数据
        List<Teacher> data = data();

        //创建一个工作簿 HSSFWorkbook是 03版本的excel
        Workbook workbook = new HSSFWorkbook();
        //创建工作表
        Sheet sheet = workbook.createSheet("新入职教师统计表");

        //单元格样式对象
        CellStyle cellStyle = workbook.createCellStyle();
        //水平居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        for (int i = 0; i < data.size(); i++) {
            if (i==0){ //表头行
                Row row0 = sheet.createRow(i);
                for (int i1 = 0; i1 < heads.size(); i1++) {
                    Cell cell = row0.createCell(i1);
                    cell.setCellValue(heads.get(i1));
                    cell.setCellStyle(cellStyle);
                }
            }else { //数据行

                Row row = sheet.createRow(i);
                row.createCell(0).setCellValue(data.get(i).getId());
                row.createCell(1).setCellValue(data.get(i).getName());
                row.createCell(2).setCellValue(data.get(i).getIntro());
                row.createCell(3).setCellValue(data.get(i).getCareer());
                row.createCell(4).setCellValue(data.get(i).getLevel());
                row.createCell(5).setCellValue(data.get(i).getAvatar());
                row.createCell(6).setCellValue(data.get(i).getSort());
                row.createCell(7).setCellValue(data.get(i).getIsDeleted());
                row.createCell(8).setCellValue(df.format(data.get(i).getGmtCreate()));
                row.createCell(9).setCellValue(df.format(data.get(i).getGmtModified()));
            }
        }

        //生成表格 （IO流）
        FileOutputStream fos = new FileOutputStream(PATH +System.currentTimeMillis()+ "新入职教师统计表.xls");
        //写入
        workbook.write(fos);
        //关流
        fos.close();

        System.out.println("生成完毕");
    }




    private static List<Teacher> data(){

        List<Teacher> list = new ArrayList<>();

        for (int i = 0; i < 20; i++) {
            Teacher teacher = Teacher.builder()
                    .id(100+i+"")
                    .name("张三"+i)
                    .intro("好老师")
                    .career("学术端正")
                    .level(1)
                    .avatar("")
                    .sort(i)
                    .isDeleted(false)
                    .gmtCreate(new Date())
                    .gmtModified(new Date()).build();
            list.add(teacher);
        }

        return list;
    }
}
